package com.weitu.permission.user.mapper;

import com.weitu.permission.user.entity.User;
import com.weitu.permission.user.entity.UserDepartment;
import com.weitu.permission.user.entity.UserDuty;

import java.util.List;
import java.util.Map;

public interface UserMapper {

    /**
     * 根据id查询User实体
     *
     * @param id id
     * @return User实体
     */
    User selectById(String id);

    /**
     * 根据用户名查询User实体
     *
     * @param name 用户名
     * @return User实体
     */
    User selectByUserName(String name);

    /**
     * 根据用户名查询User实体
     *
     * @param name 用户名
     * @return User实体
     */
    User selectByName(String name);

    /**
     * 根据id删除用户
     *
     * @param id id
     * @return 受影响的行数
     */
    int deleteById(String id);

    /**
     * 插入新用户全部字段
     *
     * @param user user
     * @return 受影响的行数
     */
    int insert(User user);

    /**
     * 插入新用户可选字段
     *
     * @param user user
     * @return 受影响的行数
     */
    int insertSelective(User user);

    /**
     * 根据id更新User
     *
     * @param user user
     * @return 受影响的行数
     */
    int updateByIdSelective(User user);

    /**
     * 根据用户名更新密码
     * @param user user
     * @return 受影响的行数
     */
    int updatePassword(User user);

    /**
     * 查询用户列表数据
     * @param map 参数
     * @return 数据map
     */
    List<User> queryList(Map map);
    /**
     * 查询用户列表总数量
     * @param map 参数
     * @return 数据map
     */
    int queryCount(Map map);

    /**
     * 插入user_department关联数据
     * @param userDepartment 要插入的数据
     * @return 受影响的行数
     */
    int insertUserDepartment(UserDepartment userDepartment);

    /**
     * 删除user_department关联数据
     * @param userDepartment 要删除的数据
     * @return 受影响的行数
     */
    int deleteUserDepartment(UserDepartment userDepartment);

    /**
     * 根据用户id删除user_duty关联数据
     * @param userId 用户id
     * @return 受影响的行数
     */
    int deleteUserDutyByUserId(String userId);

    /**
     * 插入user_duty关联数据
     * @param userDuty 要插入的数据
     * @return 受影响的行数
     */
    int insertUserDuty(UserDuty userDuty);

    /**
     * 根据id数组查询人员信息
     * @param ids id字符串
     * @return 人员信息列表
     */
    List<User> selectUsersByIds(String[] ids);
}
